package com.candy.test;

import com.candy.bean.UserInfo;
import com.candy.dao.UserInfoMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class DBDriver {
    @Test
    public void test06(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
                List<Integer> ids=new ArrayList<>();
                ids.add(1);
                ids.add(2);
                ids.add(3);
                ids.add(4);
                ids.add(5);
               List<UserInfo> ls= mapper.selectUserInfoByIds(ids);
                for (UserInfo user:ls
                     ) {
                    System.out.println(user);
                }

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void test05(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);


                int num=mapper.deleteByPrimaryKey(36);
                System.out.println(num);
//                在mybatis中的事务管理方式默认不提交，所以执行新增、修改、删除操作的时候，需要手动提交事务
//                提交事务
                session.commit();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test04(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
                UserInfo userInfo=new UserInfo();
                userInfo.setUsertel("14569874541");
                userInfo.setUseradress("长春");



                userInfo.setId(37);
                int num=mapper.updateByPrimaryKeySelective(userInfo);
                System.out.println(num);
//                在mybatis中的事务管理方式默认不提交，所以执行新增、修改、删除操作的时候，需要手动提交事务
//                提交事务
                session.commit();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test03(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
                UserInfo userInfo=new UserInfo();
                userInfo.setUsername("黑桃A");


               int num=mapper.insertSelective(userInfo);
                System.out.println(num);
//                在mybatis中的事务管理方式默认不提交，所以执行新增、修改、删除操作的时候，需要手动提交事务
//                提交事务
                session.commit();
                }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @Test
    public void test02(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
                UserInfo userInfo=new UserInfo();
//                userInfo.setUsername("admin");
                userInfo.setUserpwd("admin");
                List<UserInfo> users=mapper.getAllUserInfoes(userInfo);
                for (UserInfo user:users
                     ) {
                    System.out.println(user);
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test01(){
        String resource = "mybatis-config.xml";
        try {
//            读取mybatis-config的配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            通过配置文件创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//            由SqlSessionFactory获取SqlSession(用来执行具体的sql语句的类)
            try (SqlSession session = sqlSessionFactory.openSession()) {
//               方式一： 调用方法selectOne获取数据,参数中第一个参数是由mapper 中的namaspace和id组成,第二个参数是需要传进去的参数
//                  此种方式不推荐使用
//               UserInfo userInfo= session.selectOne("com.candy.dao.UserInfoMapper.selectUserInfoById", 1);
                //     方式二：使用和指定语句的参数和返回值相匹配的接口（比如 BlogMapper.class），
                //     现在你的代码不仅更清晰，更加类型安全，还不用担心可能出错的字符串字面值以及强制类型转换。
//                推荐使用第二种方式进行操作
                UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
                UserInfo user=mapper.selectByPrimaryKey(1);
                System.out.println(user);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
